import numpy as np

# numpy.empty() 创建未初始化的数组，可以指定创建数组的形状（shape）和数据类型（dtype）
# shape：指定数组的形状；
# dtype：数组元素的数据类型，默认值是值 float；
# order：指数组元素在计算机内存中的储存顺序，默认顺序是“C”(行优先顺序)。
arr = np.empty((3, 2), dtype=int)
print(arr)

# numpy.zeros() 创建元素均为 0 的数组，同时还可以指定被数组的形状
# 默认数据类型为浮点数
a = np.zeros(6)
print(a)  # [0. 0. 0. 0. 0. 0.]
b = np.zeros(6, dtype="complex64")
print(b)  # [0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
c = np.zeros((3, 3), dtype=[('x', 'i4'), ('y', 'i4')])
# 输出x,y，并指定的数据类型
# [[(0, 0) (0, 0) (0, 0)]
# [(0, 0) (0, 0) (0, 0)]
# [(0, 0) (0, 0) (0, 0)]]

# numpy.ones() 返回指定形状大小与数据类型的新数组，并且新数组中每项元素均用 1 填
arr1 = np.ones((3, 2), dtype=int)
print(arr1)  # [[1 1] [1 1] [1 1]]

# numpy.asarray() 与 array() 类似，但是它比 array() 更为简单。
# asarray() 能够将一个 Python 序列转化为 ndarray 对象
l1 = [1, 2, 3, 4, 5, 6, 7]
a1 = np.asarray(l1)  # 将列表转化为 numpy 数组
l2 = (1, 2, 3, 4, 5, 6, 7)
a2 = np.asarray(l2)  # 使用元组创建 numpy 数组
l3 = [[1, 2, 3, 4, 5, 6, 7], [8, 9]]
a3 = np.asarray(l3, dtype=object)  # 使用嵌套列表创建多维数组
print(a3)  # [list([1, 2, 3, 4, 5, 6, 7]) list([8, 9])]

# numpy.frombuffer()  表示使用指定的缓冲区创建数组
# buffer：将任意对象转换为流的形式读入缓冲区；
# dtype：返回数组的数据类型，默认是 float32；
# count：要读取的数据数量，默认为 -1 表示读取所有数据；
# offset：读取数据的起始位置，默认为 0。

l4 = b'hello world'  # 字节串类型
print(type(l4))  # <class 'bytes'>
a4 = np.frombuffer(l4, dtype="S1")
print(a4)  # [b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd']
print(type(a4))  # <class 'numpy.ndarray'>

# numpy.fromiter() 该方法可以把迭代对象转换为 ndarray 数组
# iterable	可迭代对象。
# dtype	返回数组的数据类型。
# count	读取的数据数量，默认为 -1，读取所有数据。
# 使用 range 函数创建列表对象
list1 = range(6)
# 生成可迭代对象i
i = iter(list1)
# 使用i迭代器，通过fromiter方法创建ndarray
array = np.fromiter(i, dtype=float)
print(array)  # [0. 1. 2. 3. 4. 5.]
